package com.ibiz.znjd.baidu.location;


import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;

import androidx.annotation.RequiresApi;

import com.ibiz.znjd.MainActivity;
import com.ibiz.znjd.R;

public class NotificationUtils extends ContextWrapper {

    private NotificationManager mManager;
    /**
     * 频道ID
     */
    public static final String ANDROID_CHANNEL_ID = "com.ibiz.znjd";

    /**
     * 频道名称
     */
    public static final String ANDROID_CHANNEL_NAME = "iBiz Mobile";

    /**
     * 维护的通知id
     */
    private int notificationId = 1;

    public NotificationUtils(Context base) {
        super(base);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            createChannels();
        }
    }

    /**
     * 创建频道(8.0之后需要，之间不用)
     * 使用的频道id和builder一致
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    public void createChannels() {
        // 设置频道ID,NAME和重要性，8.0以后看重要性
        NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
                ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
        // 设置这个频道上的通知是否显示指示灯
        androidChannel.enableLights(true);
        // 设置发布到此频道的通知的通知灯颜色
        androidChannel.setLightColor(Color.GREEN);
        // 设置发布到此频道的通知是否应振动。
        androidChannel.enableVibration(true);
        // 设置锁定屏幕上的发布到此频道的通知是否出现在锁定屏幕上和显示的内容
        // VISIBILITY_PRIVATE 在锁屏时显示基本信息，隐藏具体内容
        androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
        // 是否会有灯光
        androidChannel.shouldShowLights();
        // 新建频道
        getManager().createNotificationChannel(androidChannel);
    }

    /**
     * 获取 NotificationManager
     * @return
     */
    private NotificationManager getManager() {
        if (mManager == null) {
            mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        }
        return mManager;
    }

    /**
     * 获取通知builder,并设置好对应的配置。拿到后只需要运行build()就可以获得notification实例
     * @param title
     * @param body
     * @return
     */
    public Notification.Builder getAndroidChannelNotification(String title, String body) {
        // todo 设置通知跳转回主进程
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

        // 8.0以上要传频道id，8.0以下不用传。
        Notification.Builder builder;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            builder = new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID);
        }else{
            builder = new Notification.Builder(getApplicationContext());
        }
        return  builder
                // 设置标题
                .setContentTitle(title)
                // 设置文本信息
                .setContentText(body)
                // 设置小图标
                .setSmallIcon(R.mipmap.ic_launcher)
                // 设置权重,8.0以下的版本必须要设置,设置为最高
                .setPriority(Notification.PRIORITY_MAX)
                // 设置点击操作
                .setContentIntent(pendingIntent)
                // 设置点击通知后自动退出
                .setAutoCancel(true);
    }

    /**
     * 展示通知信息
     * @param notification 通知实例对象
     */
    public void showNotification(Notification notification){
        notificationId++;
        getManager().notify(notificationId, notification);
    }
}